package memento

// 原发器 （Originator） 类可以生成自身状态的快照， 也可以在需要时通过快照恢复自身状态。

// 基于嵌套类的实现(C++、 C# 和 Java) 在该实现方法中， 备忘录类将被嵌套在原发器中。
//这样原发器就可访问备忘录的成员变量和方法， 即使这些方法被声明为私有。
//另一方面， 负责人对于备忘录的成员变量和方法的访问权限非常有限： 它们只能在栈中保存备忘录， 而不能修改其状态。

type Originator struct {
	state string
}

func (e *Originator) CreateMemento() *Memento {
	return &Memento{state: e.state}
}

func (e *Originator) RestoreMemento(m *Memento) {
	e.state = m.GetSavedState()
}

func (e *Originator) SetState(state string) {
	e.state = state
}

func (e *Originator) GetState() string {
	return e.state
}
